#coding:utf-8

import  scrapy

from ..items import ItcastItem


class ItcastSpider(scrapy.Spider):
    #爬虫名
    name = "itcast"
    #允许抓取的域名范围(防止爬虫失控)
    allowed_domains = ["itcast.cn"]
    #起始url地址列表
    start_urls = ["http://www.itcast.cn/channel/teacher.shtml"]

    def parse(self, response):

        node_list = response.xpath("//div[@class='li_txt']")

        for node in node_list:
            # item = {}  # 这里item是个scrapy对象,其实就是个类似字典的东西,因此也可直接定义成字典添加数据,
            # 将下载的数据交给item,后面会将item交给pipeline管道处理,这里每个item表示一组数据
            item = ItcastItem()

            item['name'] = node.xpath("./h3/text()").extract_first()
            item['title'] = node.xpath("./h4/text()").extract_first()
            item['info'] = node.xpath("./p/text()").extract_first()

            yield item

            """
            这里需要将每个item由引擎交给pipeline处理,而且pipeline接受的也是item,而不是[item, item, ...]

            因此要想达到此功能,return就不满足需求,此时采用yield来传递数据,即将parse()方法变为一个生成器

            即在获取响应后
            response = download.send_request(url)

            for item in spider.parse(response):
                pipeline.process_item(item)

            """

